type operator = Add | Sub | Mul | Div 
type conditionalOperator = Lt | Leq | Gt | Geq | Eq | Neq | And | Or 
type setOperator = Union | Intersect | Difference
type sign = SAdd | SSub
  
type expression =
    ArithmeticExpression of expression * operator * expression
  | ConditionalExpression of expression * conditionalOperator * expression 
  | ArrayExpression of expression list * expression list * string
  | ArrayNumber of expression * expression * string  
  | Literal of sign * int
  | Id of sign * string  
  | Increment of string
  | Decrement of string  
  | Minus of expression    
  | SimpleAssignmentExpression of string * expression
  | ArrayAssignmentExpression of expression * expression
  | HashExpression of expression
  | PlusExpression of expression
  | SetExpression of setOperator * expression * expression
  | Concatenate of expression * expression
  | Insert of expression * expression list
  | Delete of expression * expression 
  | ArraySingleInitialiseExpression of expression * expression list 
  | ArrayMultiInitialiseExpression of expression * expression list list
  | Range of expression * expression
  | Noexpr
   
type statement =
    Expression of expression
  | If of expression * statement list * statement list
  | For of expression * expression * expression * statement list
  | Show of expression
  | ShowStr of string
  | ShowList of statement list 
  | FunctionDeclaration of string * expression list * statement list * expression
  | FunctionCall of string * expression list 
  | FunctionSimpleAssignment of string * statement
  | FunctionArrayAssignment of expression * statement 

type compilationUnit = statement list
